xpath 注入防御方法有什么
验证是否包含特定的 XPath 函数,可以过滤掉一些 XPath 函数,以提高安全性,当然了不能以牺牲用户体验或影响用户正常使用为前提。
xpath注入防御方法有:
数据提交到服务器上端,在服务端正式处理这批数据之前,对提交数据的合法性进行验证。
检查提交的数据是否包含特殊字符,对特殊字符进行编码转换或替换、删除敏感字符或字符串,如过滤[] ‘ “ and or 等全部过滤,像单双引号这类,可以对这类特殊字符进行编码转换或替换。
对于系统出现的错误信息,以IE错误编码信息替换,屏蔽系统本身的出错信息或者用统一的报错页面代替(如updataxml()这类)。
参数化XPath查询,将需要构建的XPath查询表达式,以变量的形式表示,变量不是可以执行的脚本。
通过MD5、SSL等加密算法,对于数据敏感信息和在数据传输过程中加密,即使某些非法用户通过非法手法获取数据包,看到的也是加密后的信息。 总结下就是:限制提交非法字符,对输入内容严格检查过滤,参数化XPath查询的变量。
什么是XPath
XPath 即为 XML 路径语言,是 W3C XSLT 标准的主要元素,它是一种用来确定 XML(标准通用标记语言的子集)文档中某部分位置的语言。
XPath 基于 XML 的树状结构,有不同类型的节点,包括元素节点,属性节点和文本节点,提供在数据结构树中找寻节点的能力,可用来在 XML 文档中对元素和属性进行遍历。
XPath注入原理
XPath 注入利用 XPath 解析器的松散输入和容错特性,能够在 URL、表单或其它信息上附带恶意的 XPath 查询代码,以获得高权限信息的访问权。
XPath注入类似于SQL注入,当网站使用未经正确处理的用户输入查询 XML 数据时,可能发生 XPATH 注入,由于Xpath中数据不像SQL中有权限的概念,用户可通过提交恶意XPATH代码获取到完整xml文档数据。
防御方法
过滤字符是必须的,比如[、]、转义 ‘、and、or等等。
过滤不需要的函数:name()、count() 等等。
加密/Hash:既然 XPath 注入会导致 XML 数据泄露,所以对敏感信息的加密是必须的。这个方法还有一个额外的好处:使得恶意的字符失效。比如对密码 MD5 的话,就意味着密码这个点没法插入单引号来破坏语句了,因为单引号会进入md5()函数计算。
屏蔽错误信息。
参数化 XPath 查询。这个因编程语言而异。